﻿// 导入nodejs-websocket包

// const { conn } = require('http2')
const ws = require('nodejs-websocket')

const PORT = 3000



const TYPE_ENTER = 0
const TYPE_LEAVE = 1
const TYPE_CONTENT = 2

// 记录链接上来的总用户数
let count = ['1001','1002']


// 创建一个服务



// 每次只要有用户链接，函数就会被执行，就会
// 给当前链接的用户传建一个conn对象
const server = ws.createServer(conn=>{
    // console.log(`用户链接上来了`);
    // // let count1=RandomNum(1000,2000)
    // // count.push(count1)
    // conn.username = `用户${count}`
    
    // // 1.告诉所有人，有人加入了聊天室
    // broadcast({
    //     type:TYPE_ENTER,
    //     msg:`${conn.username}进入了聊天室`,
    //     time: new Date().toLocaleDateString()
    // })


    // 用户传递过来的数据，text事件就会被触发
    conn.on('text',data=>{
        // 2.当我们接收到某个用户的信息的时候，高数所有用户，发送的消息内容是什么
        console.log(data);
        let data1 = JSON.parse(data)
        if (data1.code === '1000')
        {
            conn.username = data1.username
            broadcast({
                code:'1',
                username:data1.username,
                time: new Date().toLocaleDateString()
            })
        }
        else if(data1.code === '1001')
        {
            conn.send(JSON.stringify({
                code:'3',
                username:conn.username,
                time: new Date().toLocaleDateString()
            }))
        }
        else if (data1.code === '1005')
        {
            // 广播给其他玩家
            broadcast({
                code:'4',
                username:data1.username,
                playerInfo:data1.playerInfo
            })
        }
        // console.log(count.indexOf(data1.uid)>-1&&data1.type===0);
        // if(count.indexOf(data1.uid)>-1&&data1.type===0){
        //     conn.username = `用户${data1.uid}`
        //     broadcast({
        //         type:TYPE_ENTER,
        //         msg:`${conn.username}进入了聊天室`,
        //         time: new Date().toLocaleDateString()
        //     })
        // }else{
        //     if(data1.type===1&&count.indexOf(data1.uid)>-1){
        //         broadcast({
        //             type:TYPE_CONTENT,
        //             msg:data1.msg,
        //             time: new Date().toLocaleDateString()
        //         })
        //     }else{
        //         conn.send(JSON.stringify({
        //             type:TYPE_LEAVE,
        //             msg:'连接失败，无效用户信息',
        //             time: new Date().toLocaleDateString()
        //         }))
        //         console.log('无该用户');
        //     }
        // }
        
    })
    // 当连接断开时，就会执行这个事件 注册close事件就要注册下面的error事件
    conn.on('close',(reason)=>{
        console.log(`链接断开了`);
        // count--
        // count.indexOf()
        console.log(reason);
        // 3,告诉所有的用户有人离开了聊天室
        broadcast({
            code:'2',
            username:conn.username,
            time: new Date().toLocaleDateString()
        })
    })

    // 注册一个error事件，处理用户的错误信息

    conn.on('error',()=>{
        console.log(`用户链接异常`);
    })

})

// 广播函数
function broadcast(msg){
    // server.connections表示所有的用户（数组)
    server.connections.forEach(user=>{
        // user.send(msg)
        // console.log(user);
        user.send(JSON.stringify(msg))
    })
}

function RandomNum(Min, Max) {
    var Range = Max - Min;
    var Rand = Math.random();
    if(Math.round(Rand * Range)==0){
      return Min + 1;
    }else if(Math.round(Rand * Max)==Max)
    {
    //   index++;
      return Max - 1;
    }else{
      var num = Min + Math.round(Rand * Range) - 1;
      return num;
    }
}

server.listen(PORT,()=>{
    console.log(`服务启动成功,端口号${PORT}`);
})
